ABAP报表数据处理:本地文件upload && download

您所在的位置:网站首页 sap 中文名字 ABAP报表数据处理:本地文件upload && download

ABAP报表数据处理:本地文件upload && download

2023-07-14 00:11| 来源: 网络整理| 查看: 265

无论是upload还是download,首先要确定文件的路径和名字。再将文件数据upload到内表或是将内表数据download到本地文件。

一、 打开文件选择框,确定文件的路径和名字(以下几种方法皆可) 使用FM: WS_FILENAME_GET,已过时可使用TB_LIMIT_WS_FILENAME_GET替代,区别其他是可以打开 /保存,可指定默认路径和文件名称 CONCATENATE '总公司年终奖基数计算_' sy-datum '_' sy-uzeit '.xls' INTO lv_filename. CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET' EXPORTING DEF_FILENAME = lv_filename DEF_PATH = 'D:\HR\ ' "MASK = '.XLS' MODE = 'S' * TITLE = ' ' IMPORTING FILENAME = lv_filename * PATH = * FILE = * EXCEPTIONS * SELECTION_CANCEL = 1 * SELECTION_ERROR = 2 * OTHERS = 3 . DATA s_file LIKE rlgrap-filename. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_FILENAME = '工资单.XLS ' "默认文件名 DEF_PATH = 'd: ' "当前路径 MASK = ',*.TXT. ' "文件格式:All Files (*.*)|*.*|Excel Files (*.xls)|*.xls|Word files(*.doc)|*.doc MODE = 'O ' "S = 保存,O = 打开 " TITLE = ' ' "设置对话框名称 IMPORTING FILENAME = s_file " RC = EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5 . 使用FM: F4_FILENAME CALL FUNCTION 'F4_FILENAME' EXPORTING PROGRAM_NAME = SYST-CPROG "当前程序名 DYNPRO_NUMBER = SYST-DYNNR "当前屏幕编号 FIELD_NAME = ' ' "指定字段帮助 IMPORTING FILE_NAME = s_file "获取到的文件名 使用FM: KD_GET_FILENAME_ON_F4 CALL FUNCTION 'KD_GET_FILENAME_ON_F4' CHANGING file_name = s_file EXCEPTIONS MASK_TOO_LONG = 1 OTHERS = 2. 使用Class cl_gui_frontend_services的静态方法file_open_dialog 此方法功能强大,可以修饰文件选择框,指定默认选择路径,设置文件类型过滤,同时打开多个文件,返回用户操作等(打开系统已存在的文件) DATA: it_tab TYPE filetable, gb_rc TYPE i. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = 'Select File' default_extension = '*.xls' default_filename = ' ' file_filter = cl_gui_frontend_services=>filetype_excel "文件过滤:或者All Files (*.*)|*.*|Excel Files (*.xls)|*.xls|Word files(*.doc)|*.doc' initial_directory = 'C:' multiselection = 'X' "是否可以同时打开多个文件 CHANGING file_table = it_tab rc = gb_rc EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 others = 5 . 二、 文件upload方法(转成内表) 最常用FM:GUI_UPLOAD 有同等作用的是CLASS METHOD:* cl_gui_frontend_services=>gui_upload*,文件可以按二进制或文本格式上传,数值和日期等依赖于用户的设置。上传二进制文件时,内表通常定义为只含一个数据类型为X的field。 DATA: BEGIN OF itab OCCURS 0, raw(255) TYPE x, END OF itab. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = 'E:\02 sap文档自建 ' "要上载文件的完整路径 filetype = 'ASC' "ASC/BIN/DAT CODEPAGE = ' ' "以数字编号的字符集,如8400是简体中文 TABLES data_tab = itab " 储存文件中数据的内表 EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 . 上传excel数据可用FM: TEXT_CONVERT_XLS_TO_SAP 因为输出的I_TAB_CONVERTED_DATA类型为任意的standard table,所以此FM能方便的把excel中内容转化成格式相同的内表中,还可以去掉首行。 TYPE-POOLS truxs. DATA:it_raw TYPE truxs_t_text_data. DATA: BEGIN OF gt_data OCCURS 0, col1 TYPE char10, col2 TYPE char10, END OF gt_data. PARAMETERS:p_file TYPE rlgrap-filename. *在p_file上点击F4时触发,获取文件名 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. CLEAR p_file. CALL FUNCTION 'F4_FILENAME' IMPORTING file_name = p_file. "返回文件名 Excel传值 START-OF-SELECTION. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING i_tab_raw_data = it_row i_filename = p_file TABLES i_tab_converted_data = gt_data "*存储数据的内表,内表列数和要上传的数据列数相同,其按照列来匹配传值 EXCEPTIONS conversion_failed = 1 OTHERS = 2. 使用FM:ALSM_EXCEL_TO_INTERNAL_TABLE 1)此FM可以限制从excel文件中第几行第几列开始,一次上传多少行多少列,但一次上传的最大行数为9999,,是由接收数据的内表intern的定义来限制的。如果要上传多于9999行的数据,要编码分批上传实现的。 2)而intern不是直接与excel数据格式相符的内表,是系统定义好的,包含了行号、列号、数据值等。要先loop这个intern内表,再一条一条传到自定义格式内表中去 DATA lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE. DATA l_index LIKE sy-tabix. PARAMETERS:p_file TYPE rlgrap-filename. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = '1' i_begin_row = '2' i_end_col = '50' i_end_row = '50000' TABLES intern = lt_excel EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. *将EXCEL格式中的数据导入到内表itab中 LOOP AT lt_excel. MOVE lt_excel-col TO l_index. CASE l_index. WHEN'1'. MOVE lt_excel-value TO itab-d_name. WHEN'2'. MOVE lt_excel-value TO itab-d_text. WHEN'3'. MOVE lt_excel-value TO itab-d_type. WHEN'4'. MOVE lt_excel-value TO itab-d_caracters. ENDCASE. AT END OF row. APPEND itab. CLEAR itab. ENDAT. ENDLOOP. **********************************或者按如下方式:******************************** FIELD-SYMBOLS : . DATA exception TYPE REF TO cx_root. SORT lt_excel BY row col. TRY. LOOP AT lt_excel. MOVE lt_excel-col TO index. ASSIGN COMPONENT index OF STRUCTURE i_table TO . MOVE lt_excel-value TO . AT END OF row. APPEND i_table. "user defined internal table to store excel data CLEAR i_table. ENDAT. ENDLOOP. CATCH cx_root INTO exception. MESSAGE 'Excel data format is wrong,please check' TYPE 'E'. ENDTRY. 三、 文件download方法(内表->文件) 最常用FM: gui_download 等同于 cl_gui_frontend_services=>gui_download 先获取导出文件名,然后如下: call method cl_gui_frontend_services=>gui_download exporting * BIN_FILESIZE = filename = s_file filetype = 'DAT' " ASC,WK1 * APPEND = ' ' changing data_tab = ot_data[] exceptions file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5.

参数简述: 1)BIN_FILESIZE:当要创建二进制文件时,必须指定文件长度,但要下载成文本文件时,传入此参数会报 FILESIZE_NIT_ALLOWED错误。2)FILENAME:要存放文件的完整路径。要保证路径有效并且如果文件存在的话没有被打开,否则会报错。 3)FILETYPE:  'ASC'——ASCII格式文件,此参数会受到CODEPAGE等其他参数的影响。 'DAT'——具有单元格形式的文本文件,但直接用excel打开的话,文本内容会受单元格格式影响(如自动会去前导零等)。这种文件可直接再用gui_upload上传到SAP程序中。      'BIN'——二进制格式文件,没有格式和字体集的限制。一般配合参数codepage = '8400'  'IBM'——ASCII文件,但只能包含IBM字符集的字符(CODEPAGE = '1103'),这种格式的文件通常用在软盘上。     'DBF'——dBase格式,对于要用excel打开的数据,此种格式更能保持数据原型,不受excel单元格格式的影响。   'WK1'——Lotus 1-2-3格式。   4)APPEND:'X'以追加模式写文件,SPACE 当文件已存在时,以覆盖模式写文件。 5)CODEPAGE 指定写文件时用的字符集DATA_TAB 内表,包含要下载成文件的数据



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3